/*****************************************************************************************
**  Author:dgz master
**  Contact：jiduxiong@dagongzao.com
**
*****************************************************************************************/
//此js文件是用来自定义扩展业务代码，可以扩展一些自定义页面或者重新配置生成的代码

import DeviceInfo from '@/views/mdsproject/Components/DeviceInfo.vue'

let extension = {
  components: {
    //查询界面扩展组件
    gridHeader: DeviceInfo,
    gridBody: "",
    gridFooter: "",
    //新建、编辑弹出框扩展组件
    modelHeader: "",
    modelBody: "",
    modelRight: "",
    modelFooter: ""
  },
  tableAction: "", //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
    //下面这些方法可以保留也可以删除
    onInit() {  //框架初始化配置前，
      //示例：在按钮的最前面添加一个按钮
      //   this.buttons.unshift({  //也可以用push或者splice方法来修改buttons数组
      //     name: "按钮", //按钮名称
      //     icon: "el-icon-document", //按钮图标：https://element.eleme.cn/#/zh-CN/component/icon
      //     type: "primary", //按钮样式:https://element-plus.gitee.io/zh-CN/component/button.html
      //     //color:"#eee",//自定义按钮颜色
      //     onClick: function () {
      //       this.$Message.success("点击了按钮");
      //     }
      //   });

      //示例：设置修改新建、编辑弹出框字段标签的长度
      // this.boxOptions.labelWidth = 150;
    },
    onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      this.buttons.push({
        name: '复制',
        icon: 'el-icon-document-copy',
        type: 'primary',
        plain: true,
        onClick: () => {
          let rows = this.getSelectRows();
          if (rows.length != 1) {
            return this.$message.error('请选择一行数据复制');
          }
          this.copyTo(rows[0]);
        }
      });

      this.buttons.push({
        name: '实时数据',
        icon: 'el-icon-view',
        type: 'primary',
        plain: true,
        onClick: () => {
          let rows = this.getSelectRows();
          if (rows.length != 1) {
            return this.$message.error('请选择一行数据查看');
          }
          this.$refs.gridHeader.openDialog(rows[0].RealDeviceId);
        }
      });

      this.buttons.push({
        name: '重新初始化',
        icon: 'el-icon-refresh',
        type: 'danger',
        plain: true,
        onClick: () => {
          let rows = this.getSelectRows();
          if (rows.length != 1) {
            return this.$message.error('请选择一行数据操作');
          }
          this.reloadDevice(rows[0].RealDeviceId);
        }
      });

      this.columns.forEach(column => {
        //修改颜色
        if (column.field == 'DeviceName') {
          //格式化返回自定义单元格内容
          column.formatter = (row) => {
            return '<span class="text-primary pointer">' + row[column.field] + '</span>'
          }
          //单元格绑定事件
          column.click = (row, column, event) => {
            this.$refs.gridHeader.openDialog(row.RealDeviceId);
          };
        }
      })

      let DataTypeField = this.detailOptions.columns.find(c => c.field == 'DataType')
      this.http
        .get('api/Sys_Dictionary/GetEnumDictionary', {
          project: 'MdsProject',
          enumName: 'DataTypeEnum',
        })
        .then((r) => {
          DataTypeField.bind.data = r
        })
      let searchItem = this.searchFormOptions[0].find(x => x.field == 'Category')
      let CategoryOption = this.getOption('Category')
      this.http
        .get('api/Sys_Dictionary/GetEnumDictionary', {
          project: 'MdsProject',
          enumName: 'RealDeviceTypeEmun',
        })
        .then((r) => {
          let opt = r.map(x => ({ key: x.key, value: x.description }))
          CategoryOption.data = opt
          if (searchItem) searchItem.data = opt
        })
      CategoryOption.onChange = (v, content) => {
        this.getDataPropsOptions()
      }
      let DataServeOption = this.getOption('DataServeId')
      DataServeOption.onChange = (v, content) => {
        this.getDbBlockOptions()
      }

      this.detailOptions.pagination.sortName = "DbBlock,Offset";  //明细表排序字字段
      this.detailOptions.pagination.order = "asc"; //明细表排序方式desc或者asc

    },
    getDataPropsOptions() {
      let DataPropsField = this.detailOptions.columns.find(c => c.field == 'DataProps')
      let v = this.editFormFields.Category
      this.http
        .get('api/MdsCommon/GetMdsDataPropsByCategory', {
          category: v,
        })
        .then((r) => {
          DataPropsField.bind.data = r.map(x => ({ key: x.Name, value: `${x.Name} (${x.Description})` }))
        })
    },
    getDbBlockOptions() {
      let DbBlockField = this.detailOptions.columns.find(c => c.field == 'DbBlock')
      let v = this.editFormFields.DataServeId
      this.http
        .post('api/Mds_DataServeConfig/getPageData', {
          page: 1, rows: 99, wheres: JSON.stringify([{ name: 'DataServeId', value: v }])
        })
        .then((r) => {
          DbBlockField.bind.data = r.rows.map(x => ({ key: x.DbBlock, value: x.DbBlock }))
        })
    },
    reloadDevice(id) {
      this.$confirm("通常在设备配置改变后需要进行初始化设备，确认要执行操作？请确保当前设备没有执行动作！", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        this.http
          .post('api/Mds_RealDevice/ReloadDevice?id=' + id, {})
          .then((r) => {
            this.$message.success("操作成功！")
          })
      });
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false，则不会执行查询
      return true;
    },
    searchAfter(result) {
      //查询后，result返回的查询数据,可以在显示到表格前处理表格的值
      return true;
    },
    addBefore(formData) {
      //新建保存前formData为对象，包括明细表，可以给给表单设置值，自己输出看formData的值
      
      return true;
    },
    updateBefore(formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      return true;
    },
    delBefore(formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      return true;
    },
    addAfter(formData) {
      //新建保存前formData为对象，包括明细表，可以给给表单设置值，自己输出看formData的值
      //添加后刷新字典

      return true;
    },
    updateAfter(formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      //添加后刷新字典

      return true;
    },
    delAfter(formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      //添加后刷新字典

      return true;
    },
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      // this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
    },
    modelOpenAfter(row) {
      //点击编辑、新建按钮弹出框后，可以在此处写逻辑，如，从后台获取数据
      //(1)判断是编辑还是新建操作： this.currentAction=="Add";
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段="xxx";
      //如果需要给下拉框设置默认值，请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看：console.log(this.editFormOptions)
      this.getDataPropsOptions()
      this.getDbBlockOptions()
    },
    async copyTo(rows) {
      if (rows) {
        if (!(rows instanceof Array)) {
          rows = [rows]
        }
      } else {
        rows = this.$refs.table.getSelected()
      }
      if (rows.length == 0) {
        return this.$error(this.$ts('请选择复制来源行!'))
      }
      if (rows.length != 1) {
        return this.$error(this.$ts('只能根据一行数据进行复制!'))
      }
      this.boxOptions.title = this.$ts(this.table.cnName) + '(' + this.$ts('新建') + ')'
      //记录当前编辑的行
      this.currentRow = rows[0]
      //初始化弹出框
      if (!(await this.initBox())) return
      this.setContinueAdd(true)
      //重置表单
      this.resetDetailTable()
  
      //设置当前的数据到表单上
      this.setEditForm(rows[0])
      
      // 初始化switch/number类型默认值
      this.changeFormReadonly(false)
      
      this.currentAction = 'Copy'
      this.modelOpenAfter()
    },
  }
};
export default extension;
